package com.fau.wm.service;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.wm.entity.MedicalAdmin;
import com.fau.wm.entity.MedicalStorage;
import com.fau.wm.entity.MedicalStorageDetail;
import com.fau.wm.util.Page;

/**
 * @desc 入库管理Service接口
 * @author kangyj
 * @datetime 2014年7月31日,下午4:33:50
 */
public interface IStorageManagerService {
	
	/**
	 * @desc 分页查询入库单
	 * @param storage
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月1日,下午4:53:41
	 */
	public Page findStorageByPage(MedicalStorage storage, Map<String, Object> map);

	/**
	 * @desc 保存入库单基本信息
	 * @param storage
	 * @param admin
	 * @author kangyj
	 * @datetime 2014年8月1日,下午1:52:02
	 */
	public boolean saveStorage(MedicalStorage storage, MedicalAdmin admin);
	
	/**
	 * @desc 验证输入的编号是否已存在
	 * @param serialNum
	 * @return
	 * @author suny
	 * @datetime 2014年9月4日,下午2:42:24
	 */
	public Boolean verSerialNum(String serialNum,String hospitalId);
	
	/**
	 * @desc 保存编辑入库单基本信息
	 * @author kangyj
	 * @datetime 2014年8月1日,下午10:08:35
	 */
	public void saveEditStorage(MedicalStorage storage);
	
	/**
	 * @desc 删除入库
	 * @param storage
	 * @author kangyj
	 * @datetime 2014年8月2日,下午3:27:03
	 */
	public void delStorage(MedicalStorage storage);
	
	/**
	 * @desc 保存入库单明细和药品生产日期
	 * @param productionDate 生产日期
	 * @param validTo 有效期至
	 * @param storageDetail 入库明细
	 * @author kangyj
	 * @datetime 2014年8月5日,下午5:08:15
	 */
	public boolean saveStorageDetail(MedicalStorageDetail storageDetail);
	
	/**
	 * @desc 查询入库单明细集合
	 * @param storageId 入库基本信息id
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月5日,下午8:20:36
	 */
	public List<MedicalStorageDetail> findStorageDetailList(String storageId);
	
	/**
	 * @desc 查询包含特定药品的入库明细
	 * @param medicineId药品ID
	 * @param warehouseId仓库ID
	 * @return List<MedicalStorageDetail>
	 * @author liy
	 * @datetime 2014年12月20日,下午4:48:11
	 */
	public Page findMedicineStorageDetailList(String medicineId,String warehouseId,Map<String, Object> map);
	
	/**
	 * @desc 删除入库明细
	 * @param id
	 * @author kangyj
	 * @datetime 2014年8月6日,上午9:59:20
	 */
	public void delStorageDetail(MedicalStorageDetail storageDetail);
	
	/**
	 * @desc 通过id获取入库详细表对象
	 * @param id
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月6日,下午4:49:10
	 */
	public MedicalStorageDetail findStorageDetailById(String id);
	
	/**
	 * @desc 编辑保存入库详细
	 * @param storageDetail
	 * @author kangyj
	 * @datetime 2014年8月7日,下午2:39:25
	 */
	public void editSaveStorageDetail(MedicalStorageDetail storageDetail);
	
	/**
	 * @desc 判断入库明细中是否已存在要添加的药品
	 * @param medicineId
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月8日,下午2:38:41
	 */
	public Boolean checkMedicineExist(String storageId, String medicineId);
	
	/**
	 * @desc 更新入库状态
	 * @param status
	 * @param id
	 * @author kangyj
	 * @datetime 2014年8月11日,上午10:33:19
	 */
	public void updateStorageStatus(String status, String id);
	
	/**
	 * @desc 分页查询待审核入库单
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月18日,下午9:51:11
	 */
	public Page findStorageAuditByPage(Map<String, Object> map, MedicalStorage storage);
	
	/**
	 * @desc 更新审核人
	 * @param auditUser
	 * @param storageId
	 * @author kangyj
	 * @datetime 2014年8月19日,上午1:14:53
	 */
	public void updateAuditUser(MedicalAdmin auditUser, String storageId);
	
	/**
	 * @desc 导出入库单信息
	 * @param storageId
	 * @author hufq
	 * @return 
	 * @throws IOException 
	 * @datetime 2014年10月8日,上午11:33:42
	 */
	public Workbook exportStorageData(String storageId) throws Exception;
	
	
	/**
	 * @desc 批量导入入库药品
	 * @param admin当前用户
	 * @param sid入库表Id
	 * @param file导入的文件
	 * @return String
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月23日,下午11:08:31
	 */
	public String improtStorageMedicine(MedicalAdmin admin,String sid, File file) throws Exception;
	
	/**
	 * @desc 提交入库审核
	 * @param sid 入库单Id
	 * @author liy
	 * @datetime 2014年12月24日,上午9:16:44
	 */
	public boolean toAudit(String sid);
}
